package in.model;
import android.os.Parcel;
import android.os.Parcelable;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.util.ArrayList;
import java.util.List;
import in.lib.utils.Debug;
import in.lib.utils.SerialReaderUtil;
import in.lib.utils.SerialWriterUtil;
import lombok.Data;
@Data
public class Post extends Message
{
protected String originalId;
protected String threadId;
protected String replyTo;
protected User reposter;
protected boolean starred;
protected boolean repost;
protected Boolean hasReplies = false;
protected int replyCount;
protected int repostCount;
protected int starCount;
protected List<User> reposters;
protected List<User> starrers;
@Override public Post createFrom(JsonElement element)
{
if (element != null)
{
try
{
JsonObject postObject = element.getAsJsonObject();
setOriginalId(postObject.get("id").getAsString());
if (postObject.has("repost_of"))
{
setRepost(true);
setReposter(new User().createFrom(postObject.get("user").getAsJsonObject()));
postObject = postObject.get("repost_of").getAsJsonObject();
}
if (super.createFrom(postObject) != null)
{
this.threadId = postObject.get("thread_id").getAsString();
this.replyCount = postObject.get("num_replies").getAsInt();
this.hasReplies = replyCount > 0 || postObject.has("reply_to");
this.starCount = postObject.get("num_stars").getAsInt();
this.repostCount = postObject.get("num_reposts").getAsInt();
this.starred = postObject.has("you_starred") && postObject.get("you_starred").getAsBoolean();
this.reposters = new User().createListFrom(postObject.get("reposters"));
this.starrers = new User().createListFrom(postObject.get("starred_by"));
if (postObject.has("reply_to"))
{
this.replyTo = postObject.get("reply_to").getAsString();
}
}
return this;
}
catch (Exception e)
{
Debug.out(e);
}
}
return null;
}
@Override public List<Post> createListFrom(JsonElement element)
{
try
{
JsonArray postArray = element.getAsJsonArray();
ArrayList<Post> posts = new ArrayList<Post>(postArray.size());
for (JsonElement postElement : postArray)
{
Post post = new Post().createFrom(postElement);
if (post != null)
{
posts.add(post);
}
}
return posts;
}
catch (Exception e)
{
Debug.out(e);
}
return null;
}
@Override public Post createFrom(Parcel parcel)
{
super.createFrom(parcel);
return this;
}
@Override public String getVersion()
{
return "59abe07a-0ff2-4896-9991-e7a6bdf9f7f8";
}
@Override public Post read(SerialReaderUtil util)
{
if (super.read(util) != null)
{
try
{
String version = util.readString();
if (!version.equals(getVersion())) return null;
originalId = util.readString();
threadId = util.readString();
replyTo = util.readString();
reposter = util.readModel(User.class);
starred = util.readBoolean();
repost = util.readBoolean();
hasReplies = util.readBoolean();
replyCount = util.readInt();
repostCount = util.readInt();
starCount = util.readInt();
reposters = util.readModelList(User.class);
starrers = util.readModelList(User.class);
return this;
}
catch (Exception e)
{
Debug.out(e);
}
}
return null;
}
@Override public void write(SerialWriterUtil util)
{
super.write(util);
try
{
util.writeString(getVersion());
util.writeString(originalId);
util.writeString(threadId);
util.writeString(replyTo);
util.writeModel(reposter);
util.writeBoolean(starred);
util.writeBoolean(repost);
util.writeBoolean(hasReplies);
util.writeInt(replyCount);
util.writeInt(repostCount);
util.writeInt(starCount);
util.writeModelList(reposters);
util.writeModelList(starrers);
}
catch (Exception e)
{
Debug.out(e);
}
}
public static final Parcelable.Creator<Post> CREATOR = new Creator<Post>()
{
@Override public Post[] newArray(int size)
{
return new Post[size];
}
@Override public Post createFromParcel(Parcel source)
{
return new Post().createFrom(source);
}
};
@Override public boolean equals(Object object)
{
if (object == null)
{
return false;
}
if ((object == this)
|| (object instanceof Post
&& ((((Post)object).getId().equals(getId()) || ((Post)object).getOriginalId().equals(getOriginalId())))))
{
return true;
}
return false;
}
}